package seueniumfordemoiselle.seleniumsimplify.pages.list;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

import seueniumfordemoiselle.seleniumsimplify.pages.BasePage;
import seueniumfordemoiselle.seleniumsimplify.pages.cadastro.UFCadastroPage;
import seueniumfordemoiselle.seleniumsimplify.utils.TabelaListagem;

public abstract class ListPage extends BasePage {

	protected TabelaListagem tabela;
	
	@FindBy(xpath = "//*[@value='Novo']")
	@CacheLookup
	WebElement botaoNovo;
	
	@FindBy(xpath = "//*[@class='infoMessage']/span[2]")
	@CacheLookup
	WebElement spanMensagem;
	
	public static final String NOME_COLUNA_APAGAR = "Apagar";
	public static final String NOME_COLUNA_EDICAO = "Editar";

	public ListPage(WebDriver driver) {
		super(driver);
		PageFactory.initElements(driver, this);
		this.tabela = new TabelaListagem(driver);		
	}

	public TabelaListagem getTabela() {
		return tabela;
	}

	public void setTabela(TabelaListagem tabela) {
		this.tabela = tabela;
	}

	/**
	 * Retorna a mensagem após as operações de inserção, alteração e deleção 
	 */
	public String pegarMensagem() {		
		return this.spanMensagem.getText();
	}

	/**
	 * Clica no botão Novo
	 */
	public UFCadastroPage clicarNovo() {
		this.botaoNovo.click();
		return new UFCadastroPage(this.getDriver());
	}
	
	public Boolean isRegistroPresente(String nmColuna, String vlColuna){
		return tabela.isRegistroPresente(nmColuna, vlColuna);
	}
	
	public UFCadastroPage clicarAlterar(String nmColuna, String vlColuna, String nmColunaEditar){
		tabela.clicarAlterar(nmColuna, vlColuna, nmColunaEditar);
		return new UFCadastroPage(this.getDriver());
	}
	
	public ListPage clicarApagar(String nmColuna, String vlColuna, String nmColunaApagar) {
		tabela.clicarApagar(nmColuna, vlColuna, nmColunaApagar);
		return this;
	}

}